package com.io.buffered_writer;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;

/**
 * 批量修改文件名 IO流
 * 修改PC端、手机端酷我音乐下载的歌曲文件名
 */
public class Test {
    //指定源文件名及路径
    static String pathName = "d:\\音乐\\#音乐Music\\Real_Good_Feeling-Oh_The_Larceny-67864833.mp3";
    //修改后的新的文件夹路径
    static String strNewPath= "d:\\音乐\\#音乐Music\\";
    static int count=0,unCount=0;
    public static void main(String[] args){
        System.out.println("需要修改文件名的数量:\t"+getCount(new File(strNewPath))[0]);;
        System.out.println("不需要修改文件名的数量:\t"+(getCount(new File(strNewPath))[1]/2));;
        //遍历文件夹,查看是否有需要修改文件名的歌曲
        //getAllFileNames(new File("d:\\音乐\\#音乐Music\\"));
        //batchFileRenaming("d:\\音乐\\#音乐Music\\Real_Good_Feeling-Oh_The_Larceny-67864833.mp3");
    }
    /**
     * 遍历该文件夹,判断是否有需要修改文件名的歌曲
     * @param file 遍历该文件夹
     */
    public static void getAllFileNames (File file){
        getCount(file);
        //System.out.println("file.getName()="+file.getName());
        //batchFileRenaming( file.getName() );
        if( file == null || !file.exists() ){
            return;
        }else{
            if( file.isDirectory() ){
                for ( File f : file.listFiles() ) {
                    getAllFileNames( f );
                }
            }
        }
    }
    /**
     *
     */
    public static void batchFileRenaming(String pathName) {
        System.out.println("判断是否有需要修改文件名的歌曲");
        //创建文件类对象,并指定文件路径
        File file = new   File(pathName);
        //获取文件的绝对路径字符串
        String filename = file.getAbsolutePath();
        System.out.println("AbsolutePath:FileName=\t"+filename);
        //如果歌曲名字带下划线
        if(filename.indexOf("_")>=0){
            if(filename.indexOf("-")>=0){
                filename = filename.substring(filename.lastIndexOf("\\")+1,filename.length());
                System.out.println("substring=>filename=\t"+filename);
                String[] array = filename.split("-");
                System.out.println("array[1]=\t"+array[1]);
                //歌手名,替换歌手名中的'_'下划线
                String singer=null;
                if(array[1].indexOf(".")>0){
                    singer = array[1].substring(0,array[1].indexOf(".")).replace("_"," ").trim();
                }
                singer = array[1].replace("_"," ").trim();
                //替换歌曲名中的'_'下划线
                String songName = array[0].replace("_"," ").trim();//歌曲名

                String suffix = null;////歌曲格式后缀,.mp3 .flac等
                if (filename.indexOf(".")>0){
                    //截取歌曲后缀
                    suffix = filename.substring(filename.indexOf("."),filename.length());
                    //String[] suffixArr = filename.split("\.");
                    //System.out.println("suffix="+suffix);
                }
                System.out.println("singer="+singer+"\nsongName="+songName+"\nsuffix="+suffix);
                //System.out.println("filename="+filename);
                //
                String pathFileName = strNewPath + singer+" - "+songName + suffix;
                System.out.println("newFileName="+pathFileName);
                File newFile = new File(pathFileName);//xx.xx表示文件名及后缀
                //修改文件名并移动
                if(file.renameTo(newFile)){
                    System.out.println("修改成功!");
                }else{
                    System.out.println("修改失败");
                }
            }
            //如果歌曲名不带下划线,则歌曲名和歌手名互换位置
        }/*else if(filename.indexOf("-")>=0){
            System.out.println("歌曲名和歌手名互换位置");
            filename = filename.substring(filename.lastIndexOf("\\")+1,filename.length());
            //System.out.println("filename="+filename);
            String[] array = filename.split("-");
            //歌手名,替换歌手名中的'_'下划线
            String singer = array[0].substring(0,array[1].indexOf(".")).replace("_"," ").trim();
            //替换歌曲名中的'_'下划线
            String songName = array[1].replace("_"," ").trim();//歌曲名

            String suffix = null;////歌曲格式后缀,.mp3 .flac等
            if (filename.indexOf(".")>0){
                //截取歌曲后缀
                suffix = filename.substring(filename.indexOf("."),filename.length());
                //String[] suffixArr = filename.split("\.");
                System.out.println("suffix="+suffix);
            }
            System.out.println("singer="+singer+"\nsongName="+songName+"\nsuffix="+suffix);
            //System.out.println("filename="+filename);
            //
            String pathFileName = strNewPath + singer+" - "+songName + suffix;
            System.out.println("newFileName="+pathFileName);
            File newFile = new File(pathFileName);//xx.xx表示文件名及后缀
            //修改文件名并移动
            if(file.renameTo(newFile)){
                System.out.println("修改成功!");
            }else{
                System.out.println("修改失败");
            }
        }*/
    }

    public static int[] getCount(File file){

        //getAllFileNames(file);
        //创建文件类对象,并指定文件路径
        //File file = new   File(pathName);
        //获取文件的绝对路径字符串
        String filename = file.getAbsolutePath();
        //System.out.println("AbsolutePath:FileName=\t"+filename);


        if( file == null || !file.exists() ){
            return null;
        }else{
            if( file.isDirectory() ){
                for ( File f : file.listFiles() ) {
                    //如果歌曲名字带下划线
                    if(f.getName().indexOf("_")>=0){
                        System.out.println("需要修改的:\t"+f.getName());
                        count++;
                    }else{
                        unCount++;
                    }
                    getCount( f );
                }
            }
        }
        int[] arrays = {count,unCount};
        return arrays;
    }
}
